home *** CD-ROM | disk | FTP | other *** search
- /* Essai des objets V1.00
- * Tue Mar 23 15:55:19 1993
- * tabs = 2
- */
-
-
- #define INTUITION_PREFERENCES_H 0
- #include <intuition/intuition.h>
- #include <exec/memory.h>
- #include "IObject.h"
-
- /* declarations des libraries utilisés */
- CPTR IntuitionBase=NULL;
- CPTR GfxBase=NULL;
- CPTR DiskfontBase=NULL;
-
- struct Window *window=NULL;
-
- struct NewWindow new_window=
- {
- 50, 25, /* Position de la fenêtre */
- 480, 125, /* Taille de la fenêtre */
- 0, 1,
- CLOSEWINDOW|IDCMP_CYCLE|IDCMP_CHECK|IDCMP_STRING|IDCMP_BUTTON|IDCMP_STRING|
- IDCMP_INTEGER|IDCMP_SCROLLER|VANILLAKEY, /* IDCMPFlags */
- SMART_REFRESH|WINDOWCLOSE|WINDOWDRAG|WINDOWDEPTH|ACTIVATE|RMBTRAP, /* Flags*/
- NULL,
- NULL,
- "Test de IObject.lib", /* Titre de la fenetre */
- NULL,
- NULL,
- 0, 0,
- 0, 0,
- WBENCHSCREEN /* Type: fenetre Workbench. */
- };
-
- /* definitions des fontes utilisés */
- struct TextAttr font=
- {
- "topaz.font",
- 8,
- FS_NORMAL,
- FPF_ROMFONT
- };
-
- struct TextAttr opalfont=
- {
- "opal.font",
- 9,
- FS_NORMAL,
- FPF_DISKFONT
- };
-
-
- /* identificateur pour les IObject */
- #define ID_CYCLE 0
- #define ID_SCROLLER 1
- #define ID_BUTTON 2
- #define ID_CHECK 3
- #define ID_INTEGER 4
- #define ID_STRING 5
- #define ID_TGBUTTON 6
- #define ID_IMGBUTTON 7
-
- #define ID_MIN ID_CYCLE
- #define ID_MAX ID_IMGBUTTON
-
- STRPTR text[]= /* tableau de chaines pour le cycle */
- {
- "IObject.lib",
- "is very",
- "useful.",
- NULL /* NOTEZ-BIEN: il faut un NULL à la fin du tableau de chaines */
- };
-
- struct NewCycle newcycle=
- {
- 203, 17, /* LeftEdge, TopEdge */
- 122, 14, /* Width, Height */
- LABEL_LEFT|LABEL_HOT_KEY,
- 0,
- "C_ycle", /* Label */
- &font, /* Fonte */
- text /* tableau de chaine de caracteres */
- };
-
- struct NewScroller newscroller=
- {
- 358, 26,
- 106, 11,
- LABEL_ABOVE,
- 0,
- "Scroller",
- &font,
- 0, /* Pos = 0 */
- 25, /* Partie visible 25 */
- 100 /* Maximum 100 */
- };
-
-
- struct NewButton newbutton=
- {
- 22, 17,
- 94, 14,
- LABEL_INSIDE|LABEL_HOT_KEY,
- 0,
- "_Button",
- &font
- };
-
-
- struct NewCheck newcheck=
- {
- 403, 64,
- 20, 16,
- LABEL_LEFT|LABEL_HOT_KEY,
- 0,
- "_Check",
- &font
- };
-
-
- struct NewInteger newint=
- {
- 256, 42,
- 72, 14,
- LABEL_RIGHT|LABEL_HOT_KEY,
- STR_CENTER, /* l'entier est centré dans l'IObject */
- "_Integer",
- &font
- };
-
-
- struct NewString newstr=
- {
- 8, 38,
- 162, 12,
- LABEL_RIGHT|LABEL_HOT_KEY,
- STR_SINGLEBORD, /* Bordure simple */
- "_String",
- &font,
- "Welcome to IObject.lib", /* texte initial */
- 60 /* 60 caracteres au maximum */
- };
-
-
- struct NewButton newtoggle=
- {
- 331, 102,
- 140, 18,
- LABEL_INSIDE|LABEL_HOT_KEY|LABEL_PEN2,
- BT_TOGGLE, /* le bouton est interrupteur */
- "_Toggle Button",
- &opalfont
- };
-
-
- /* image pour le bouton */
- UWORD imagedata[]=
- {
- 0x0000, 0x0000, 0x0100, 0x0000, 0x07c0, 0x1ff0, 0x3ff8, 0x3ff8,
- 0x7ffc, 0x7efc, 0x7ffc, 0x3ff8, 0x3ff8, 0x1ff0, 0x07c0, 0x0000,
- 0x07c0, 0x07c0, 0x0380, 0x07e0, 0x1ff8, 0x3fec, 0x7fde, 0x7fbe,
- 0xff7f, 0xffff, 0xffff, 0x7ffe, 0x7ffe, 0x3ffc, 0x1ff8, 0x07e0,
- };
-
- struct Image ImageButton=
- {
- 0, 0,
- 16, 16,
- 2,
- NULL,
- 3, 0,
- NULL
- };
-
- struct NewButton newimgbutton=
- {
- 381, 80,
- 40, 18,
- LABEL_INSIDE,
- BT_IMAGELABEL, /* le bouton est une image */
- &ImageButton, /* pointeur vers l'image */
- &font
- };
-
-
- struct NewTextArea newtextarea=
- {
- 10, 64,
- 312, 57,
- LABEL_ABOVE,
- TAF_CLIP_TEXT, /* le texte qui dépasse se poursuit à la ligne suivante */
- "TextArea",
- &opalfont,
- 1,3,
- 1, /* un pixel entre deux lignes */
- 0x03 /* bitplanes 1 et 2 utilisés */
- };
-
-
- CPTR textarea=NULL; /* pointeur sur le TextAera */
- CPTR EZGadget[ID_MAX + 1]={0}; /* Tableau d'IObject */
- UBYTE HotKeyTable[ID_MAX+1]; /* tableau pour gerer les raccourcis clavier */
-
-
- /*
- * Cherche un caractère dans un tableau de caracteres
- * Renvoie l'index du caractère dans le tableau ou -1 s'il n'y est pas
- */
- WORD FindHotKey(UBYTE hotkey, UBYTE *table, UWORD len)
- {
- UWORD ind=0;
-
- while (len--)
- {
- /* toupper si on ne veut pas faire la difference entre majuscule et minuscule */
- if (toupper(*table++) == toupper(hotkey))
- return (ind);
- ind++;
- }
- return (-1);
- }
-
-
- /*
- * Libere les ressources
- */
- VOID clean_exit(void)
- {
- COUNT i;
-
- if (window) CloseWindow(window);
- for (i = ID_MIN; i <= ID_MAX; i++) /* libère tous les object */
- if (EZGadget[i])
- FreeObject(EZGadget[i]);
-
- if (textarea) FreeTextArea(textarea);
- ExitEasyGadget(); /* IL FAUT appeler ExitEasyGadget() avant de partir */
- if (DiskfontBase) CloseLibrary(DiskfontBase);
- if (GfxBase) CloseLibrary(GfxBase);
- if (IntuitionBase) CloseLibrary(IntuitionBase);
- if (ImageButton.ImageData) FreeMem(ImageButton.ImageData, sizeof(imagedata));
- exit();
- }
-
-
- main(int ac, char **av)
- {
- struct IntuiMessage *message;
- BOOL close_me;
- COUNT i;
-
- /* ouvre l'intuition.library et verifie si elle existe */
- if (!(IntuitionBase = OpenLibrary("intuition.library", 0)))
- clean_exit();
-
- /* ouvre la graphics.library et verifie si elle existe */
- if (!(GfxBase = OpenLibrary("graphics.library", 0)))
- clean_exit();
-
- /* Recopie en CHIP l'image */
- if (ImageButton.ImageData = (UWORD *) AllocMem(sizeof(imagedata), MEMF_CHIP))
- memcpy(ImageButton.ImageData, imagedata, sizeof(imagedata));
- else
- clean_exit();
-
- /* si demo est lancé sans arguments, on ouvre la diskfont.library */
- if (ac == 1)
- DiskfontBase = OpenLibrary("diskfont.library", 0);
-
- /* Si la diskfont.library est ouverte on utilise les fontes demandées */
- /* sinon on utilise la Topaz 8 par defaut. */
-
- /* On ouvre la fenetre */
- window = (struct Window *) OpenWindow( &new_window );
-
- /* fenetre ouverte ? */
- if(!window)
- clean_exit();
-
- /* Initialiser IObject.lib */
- if (!InitEasyGadget())
- clean_exit();
-
- /* cree le TextArea, on s'en va si il y a une erreur */
- if (!(textarea = CreateTextArea(&newtextarea, window->RPort)))
- clean_exit();
-
- /* Creer les objets */
- EZGadget[ID_CYCLE] = CreateCycle(&newcycle, ID_CYCLE);
- EZGadget[ID_SCROLLER] = CreateScroller(&newscroller, ID_SCROLLER);
- EZGadget[ID_BUTTON] = CreateButton(&newbutton, ID_BUTTON);
- EZGadget[ID_CHECK] = CreateCheck(&newcheck, ID_CHECK);
- EZGadget[ID_INTEGER] = CreateInteger(&newint, ID_INTEGER);
- EZGadget[ID_STRING] = CreateString(&newstr, ID_STRING);
- EZGadget[ID_TGBUTTON] = CreateButton(&newtoggle, ID_TGBUTTON);
- EZGadget[ID_IMGBUTTON] = CreateButton(&newimgbutton, ID_IMGBUTTON);
-
- /* Verifier que les objects ont été crées */
- for (i = ID_MIN; i <= ID_MAX; i++)
- if (EZGadget[i] == NULL)
- clean_exit();
-
- /* ajouter les objets à la fenetre et les afficher */
- for (i = ID_MIN; i <= ID_MAX; i++)
- if (EZGadget[i])
- {
- AddObjectToWindow(EZGadget[i], window, NULL);
- DisplayObject(EZGadget[i]);
- }
-
- /* affiche un message de bienvenue */
- TAPuts(textarea, "Welcome in IObject.lib");
-
- /* remplit le tableau pour gerer les raccourcis-clavier */
- for (i = ID_MIN; i <= ID_MAX; i++)
- HotKeyTable[i] = GetHotKey(EZGadget[i]);
-
- /* l'entier doit être compris entre -5000 et 5000 */
- ModifyObject(EZGadget[ID_INTEGER], 0, -5000, 5000);
-
- /* On reste dans la boucle tant qu'on a pas cliqué dans le gadget de fermeture */
- close_me = FALSE;
- while(close_me == FALSE)
- {
- /* attendre un évenement */
- Wait(1 << window->UserPort->mp_SigBit);
-
- /* Recuperer l'IntuiMessage */
- while(message = (struct IntuiMessage *) GetMsg(window->UserPort))
- {
- struct IntuiMessage msg;
- BOOL changed;
- CPTR obj;
- UWORD ID;
-
- changed = FALSE;
- msg = *message; /* recopier le message */
- ReplyMsg(message); /* Repondre au message */
-
- /* Traiter l'evenement */
- switch( msg.Class )
- {
- case CLOSEWINDOW: /* CloseWindow gadget => on s'en va */
- close_me=TRUE;
- break;
-
- case VANILLAKEY: /* Raccourcis-clavier */
- if ((ID = FindHotKey(msg.Code, HotKeyTable, ID_MAX+1)) != -1)
- {
- obj = EZGadget[ID];
- ActivateObject(obj);
- changed = TRUE;
- }
- break;
-
- default:
- if (obj = FindObjectMsg(&msg))
- {
- ID = GetObjectID(obj);
- changed = SendMsgToObject(obj, &msg);
- }
- break;
- }
-
- if (changed)
- {
- switch (ID)
- {
- case ID_CYCLE:
- TAPrintf(textarea, "Option %s selected.\n", text[ObjectValue(obj)]);
- break;
- case ID_SCROLLER:
- TAPrintf(textarea, "Position = %ld.\n", ObjectValue(obj));
- break;
- case ID_BUTTON:
- TAPuts(textarea, "Button pressed.");
- break;
- case ID_CHECK:
- if (ObjectValue(obj))
- TAPuts(textarea, "Check is marked.");
- break;
- case ID_INTEGER:
- TAPrintf(textarea, "Integer Value is %ld.\n", ObjectValue(obj));
- break;
- case ID_STRING:
- TAPrintf(textarea, "You have entered the text: %s.\n", ObjectValue(obj));
- break;
- case ID_TGBUTTON:
- TAPrintf(textarea, "Button is %s.\n", ObjectValue(obj) ? "On" : "Off");
- break;
- case ID_IMGBUTTON:
- TAPuts(textarea, "Image Button pressed");
- break;
- }
- }
- }
- }
- clean_exit();
- }
-